const { app, BrowserWindow } = require('electron')
const path = require('path')
const { setupFileLogging } = require('./utils/logger')
const { createWindow, createSplashScreen } = require('./window')
const { setupMenu } = require('./menu')
const { setupIpcHandlers } = require('./ipc-handlers')
const { setupTimeManagementHandlers } = require('./time-management-handlers')
const { setupAutoLaunch } = require('./auto-launch')
const { initSystemInfo } = require('./system-info')

// 全局变量
let logStream

// 设置控制台编码
if (process.platform === 'win32') {
  process.env.LANG = 'zh_CN.UTF-8'
}

// 应用初始化
app.whenReady().then(async () => {
  // 设置日志
  logStream = setupFileLogging()
  
  // 创建启动屏幕
  const splashScreen = createSplashScreen()
  
  // 初始化系统信息
  await initSystemInfo()
  
  // 设置菜单
  setupMenu()
  
  // 设置IPC处理程序
  setupIpcHandlers()
  
  // 设置时间管理IPC处理程序
  setupTimeManagementHandlers()
  
  // 设置自启动
  setupAutoLaunch()
  
  // 创建主窗口
  createWindow(splashScreen)
  
  // 注册快捷键和其他事件监听
  app.on('activate', function () {
    // 在macOS上，当dock图标被点击并且没有其他窗口打开时，
    // 通常在应用程序中重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 当所有窗口都被关闭时退出应用
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

// 在应用退出时关闭日志流
app.on('will-quit', () => {
  if (logStream) {
    logStream.end()
  }
})